//
//  main.c
//  进制转换
//
//  Created by ws on 2017/7/19.
//  Copyright © 2017年 王松. All rights reserved.
//

#include <stdio.h>

/**
 十进制转二进制
 规则:除2取余 倒序排
        商  余数
 13/2   6    1
 6/2    3    0
 3/2    1    1 
 1/2    0    1
 二进制: 1101
 */
void test(){
    //十进制转二进制
    int a = 13;
    int b = 0b1101;
    printf("%d -- %d \n",b,a);
}
/**
 二进制转转成十进制
 规则:每一位乘以对应位上2的几次方,然后相加
 0b1101 1*2(0) + 0*2(1) + 1*2(2) + 1*2(3)
 */
void test1(){
    
}
/**
 二进制转八进制
 规则:每一个八进制数都对应3个二进制数 三个二进制数最大表示一个7 一个八进制数最大也表示一个7
     从右往左每三位分成几组计算,每三位转一位
 0b1 101 ---> 015;
 */
/**
 八进制转二进制:一个八进制位转换成为二进制位
 规则::从右往左一位转3位(每一个八进制位都必须转3个二进制位)
 015  --> 0b1101
 */
/**
 二进制转16进制
 规则:一个16进制位对应4个二进制位,因为四个二进制数最大表示一个15,一个16进制位最大小时一个15
   从右往左每4位分成几组计算,每4位转一位 4个二进制位转换成一个16进制位
 */
/**
 16进制转二进制
 规则:一个16进制位对应4个二进制位,因为四个二进制数最大表示一个15,一个16进制位最大小时一个15
 从右往左每1位分成几组计算,每1位转4位 一个16进制位转换成4个二进制位
 */
/**
 八进制转十六进制
 规则:先把八进制转换成二进制,再把二进制转成16进制
 
 */

/**
 十进制转十六进制
 规则:除以16取余 倒序排
 */

/**
 十六进制转十进制
 规则:每一位乘以对应位上的密数 然后相加
 0x64 --> 6*16 + 4 
 */
void test2(){
    
}
int main(int argc, const char * argv[]) {

    
    
    return 0;
}
/**
 进制间转换
 二进制转十进制
 0b1011 = 1 * 20 + 1 * 21 + 0 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 0 * 4 + 1 * 8 = 1 + 2 + 0 + 8 = 11
 
 八进制转十进制
 027 = 7 * 80 + 2 * 81 = 7 * 1 + 2 * 8 = 23
 
 二进制转八进制
 0b11110011 = 0b 011  110  011  = 0363
 
 八进制转二进制
 025 = 0b 010  101 = 0b10101
 
 十六进制转十进制
 0x2F = 15 * 160 + 2 * 161 = 15 * 1 + 2 * 16 = 47
 
 二进制转十六进制
 0b11110011 = 0b 1111  0011  = 0xF3
 
 十六进制转二进制
 0x25 = 0b 0010  0101=0b100101
 */




